Skip to content

board: a pill is a label, not a paragraph — the second half of the phone fix - #270

Merged
Jammy2211 merged 1 commit into
mainfrom
claude/mobile-scroll-dashboard-inconsistency-7xoqnu
Aug 24, 2026
Merged

board: a pill is a label, not a paragraph — the second half of the phone fix#270
Jammy2211 merged 1 commit into
mainfrom
claude/mobile-scroll-dashboard-inconsistency-7xoqnu

Conversation

@Jammy2211

Copy link
Copy Markdown
Contributor

Follow-up to #266. That change made wrapping the page default and the Mind and Memory boards went quiet — but Brain and Heart still scrolled, because white-space:nowrap is what makes a chip read as a chip and is therefore the one thing an inherited overflow-wrap cannot reach.

The measurement

Rendered from the real Mind and the committed dev-box observation, in a headless Chromium at a 375px viewport:

before:  VW=375  SCROLLW=1271        ← 896px off-screen
         widest element: SPAN.pill n  w=1255
after:   VW=375  SCROLLW=375         (and 305/305 at a 320px viewport)

Every offender was one element — a .pill in the 🤖 Autonomous runs section, carrying:

safe (feature medium cap; same resumed acknowledged launch and campaign merge authorization)

The cause

autonomy_log.md writes its two judgement columns as <verdict> (<why>), because it is a record read as a table. collect_autonomy passed them to pills() whole.

The same bug was already eating the colour: _LEVEL_TONES and _OUTCOME_TONES key off the bare verdict, so every one of those rows rendered neutral — a safe run and a human-required one looked alike.

The change, one per layer

  • collect_autonomy trims each judgement cell to its verdict; the why stays in the log, which is what the section points at. Capped at 28 characters with an ellipsis for cells carrying no parenthetical. task was already capped at 70 — these two were the omission. The tones resolve again.
  • The theme bounds every pill (max-width:100%, overflow:hidden, text-overflow:ellipsis), so a board that hands a chip a sentence gets an ellipsis rather than a page that scrolls. vertical-align moves to bottom because overflow:hidden puts an inline-block's baseline on its bottom edge. This is the guard board theme: make wrapping the page default so no board scrolls sideways #266 could not express: the wrap default covers everything that may wrap; this covers the one thing that may not.

Heart

Not reproduced. No snapshot buildable here overflows — all-green, STALE, RED, the full 25-repo table, the performance and NO_RUN census blocks, and nowrap run ↗ link labels on long workspace names all measure 375/375. The live page can't be fetched from the session (its Pages host is blocked by the egress policy), so the remaining suspects are named rather than proven: table.board td.name{white-space:nowrap} and a.out{white-space:nowrap} in PyAutoHeart's own _EXTRA_CSS — the same class of trap this PR closes in the theme, but living in that repo.

Tests

467 pass, including two new ones — the theme's pill bound, and a board test that a sentence-length log cell becomes a chip-sized label with its tone intact. PyAutoHeart's dashboard suite (66) and PyAutoMind's (181) pass against the new theme.


Generated by Claude Code

…one fix

Wrapping became the page default last change, and the Mind and Memory boards
went quiet. Brain and Heart still scrolled, because `white-space:nowrap` is
what makes a chip read as a chip and is therefore the one thing an inherited
`overflow-wrap` cannot reach.

Rendered from the real Mind and the committed dev-box observation and measured
in a headless Chromium at a 375px viewport, the Brain board's document was
1271px wide — 896px off-screen. Every offender was one element: a `.pill` in
the 🤖 Autonomous runs section, the widest at 1255px, carrying

  safe (feature medium cap; same resumed acknowledged launch and campaign
  merge authorization)

The autonomy log writes its two judgement columns as `<verdict> (<why>)`
because it is a record read as a table, and `collect_autonomy` passed them to
`pills()` whole. The same bug was already eating the colour: `_LEVEL_TONES`
and `_OUTCOME_TONES` key off the bare verdict, so every one of those rows
rendered neutral — a `safe` run and a `human-required` one looked alike.

Two changes, one per layer:

* `collect_autonomy` trims each judgement cell to its verdict (the `why` stays
  in the log, which is what the section points at), capped at 28 characters
  with an ellipsis for the cells that carry no parenthetical. `task` was
  already capped at 70; these two were the omission. The tones resolve again.
* The theme bounds every pill — `max-width:100%`, `overflow:hidden`,
  `text-overflow:ellipsis` — so a board that hands a chip a sentence gets an
  ellipsis rather than a page that scrolls. `vertical-align` moves to `bottom`
  because `overflow:hidden` puts an inline-block's baseline on its bottom
  edge. This is the guard the last change could not express: the wrap default
  covers everything that may wrap, this covers the one thing that may not.

Re-measured after the change: Brain 375/375 at 390px and 305/305 at 320px,
from the same real data. Heart could not be reproduced overflowing from any
snapshot buildable here (all-green, STALE, RED, the full 25-repo table, the
performance and NO_RUN blocks, nowrap link labels) — its own stylesheet's
`td.name`/`a.out` nowrap rules are the remaining suspects, and they live in
PyAutoHeart.

467 tests pass; PyAutoHeart's dashboard suite (66) and PyAutoMind's (181) pass
against the new theme.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VhpLPmmoSFAtVpppG8azVA
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants